#ifndef _GAMEENEMY_H_
#define _GAMEENEMY_H_

#include "GameCreature.h"


enum GameEnemyBaseIntValue
{
	GEBIV_ID = 0,
	GEBIV_ROLE,
	
	GEBIV_BASEVITALITY,
	GEBIV_BASESTRENGTH,
	GEBIV_BASETOUGHNESS,
	GEBIV_BASEDEXTERITY,

	GEBIV_EARTH,
	GEBIV_WATER,
	GEBIV_FIRE,
	GEBIV_WIND,

	GEBIV_INITNUM,
	GEBIV_AI,
	GEBIV_GET,

	GEBIV_POISON,
	GEBIV_PARALYSIS,
	GEBIV_SLEEP,
	GEBIV_STONE,
	GEBIV_DRUNK,
	GEBIV_CONFUSION,

	GEBIV_PETSKILL0,
	GEBIV_PETSKILL1,
	GEBIV_PETSKILL2,
	GEBIV_PETSKILL3,
	GEBIV_PETSKILL4,
	GEBIV_PETSKILL5,
	GEBIV_PETSKILL6,

	GEBIV_RARE,
	GEBIV_CRITICAL,
	GEBIV_COUNTER,
	GEBIV_SLOT,
	GEBIV_PETFLAG,
	GEBIV_SIZE,

	GEBIV_LIMITLEVEL,
	GEBIV_AMALGAMATION,
    
    GEBIV_MATERIAL0,
    GEBIV_MATERIAL1,
    GEBIV_MATERIAL2,
    GEBIV_MATERIAL3,
    GEBIV_MATERIAL4,

	GEBIV_INTCOUNT
};

enum GameEnemyIntValue
{
	GEIV_ID = 0,
	GEIV_BASEID,
	GEIV_UNKNOW,

	GEIV_ATTACK,
	GEIV_ATTACKTARGET,
	GEIV_ATTACKAI,

	GEIV_DEFENCE,
	GEIV_MAGIC,
	GEIV_ESCAPE,

	GEIV_WA0,
	GEIV_WA1,
	GEIV_WA2,
	GEIV_WA3,
	GEIV_WA4,
	GEIV_WA5,
	GEIV_WA6,

	GEIV_RN,

	GEIV_LEVELMIN,
	GEIV_LEVELMAX,
	GEIV_LEVELNUMMAX,
	GEIV_LEVELNUMMIN,

	GEIV_FIGHT,
	GEIV_EXP,
	GEIV_DP,
	GEIV_TYPE,
	GEIV_PET,

	GEIV_ITEM0,
	GEIV_ITEM1,
	GEIV_ITEM2,
	GEIV_ITEM3,
	GEIV_ITEM4,
	GEIV_ITEM5,
	GEIV_ITEM6,
	GEIV_ITEM7,
	GEIV_ITEM8,
	GEIV_ITEM9,

	GEIV_ITEMPRO0,
	GEIV_ITEMPRO1,
	GEIV_ITEMPRO2,
	GEIV_ITEMPRO3,
	GEIV_ITEMPRO4,
	GEIV_ITEMPRO5,
	GEIV_ITEMPRO6,
	GEIV_ITEMPRO7,
	GEIV_ITEMPRO8,
	GEIV_ITEMPRO9,

	GEIV_INTCOUNT
};

enum GameEnemyGroupIntValue
{
	GEGIV_ID = 0,
	GEGIV_ITEM0,
	GEGIV_ITEM1,

	GEGIV_ENEMY0,
	GEGIV_ENEMY1,
	GEGIV_ENEMY2,
	GEGIV_ENEMY3,
	GEGIV_ENEMY4,
	GEGIV_ENEMY5,
	GEGIV_ENEMY6,
	GEGIV_ENEMY7,
	GEGIV_ENEMY8,
	GEGIV_ENEMY9,

	GEGIV_ENEMYPRO0,
	GEGIV_ENEMYPRO1,
	GEGIV_ENEMYPRO2,
	GEGIV_ENEMYPRO3,
	GEGIV_ENEMYPRO4,
	GEGIV_ENEMYPRO5,
	GEGIV_ENEMYPRO6,
	GEGIV_ENEMYPRO7,
	GEGIV_ENEMYPRO8,
	GEGIV_ENEMYPRO9,

	GEGIV_COUNT
};

enum GameEnemyCountIntValue
{
	GECIV_ID = 0,
	GECIV_MAPID,

	GECIV_X1,
	GECIV_Y1,
	GECIV_X2,
	GECIV_Y2,

	GECIV_MIN,
	GECIV_MAX,
	GECIV_NUM,
	GECIV_UNKNOW,

	GECIV_GROUP0,
	GECIV_GROUP1,
	GECIV_GROUP2,
	GECIV_GROUP3,
	GECIV_GROUP4,
	GECIV_GROUP5,
	GECIV_GROUP6,
	GECIV_GROUP7,
	GECIV_GROUP8,
	GECIV_GROUP9,

	GECIV_GROUPPRO0,
	GECIV_GROUPPRO1,
	GECIV_GROUPPRO2,
	GECIV_GROUPPRO3,
	GECIV_GROUPPRO4,
	GECIV_GROUPPRO5,
	GECIV_GROUPPRO6,
	GECIV_GROUPPRO7,
	GECIV_GROUPPRO8,
	GECIV_GROUPPRO9,


	GECIV_COUNT
};

struct GameEnemyBase 
{
	//fbyte		name[ F_MAX_NAME ];
	
	freal32		levelUpPoint;

	fint32		intValue[ GEBIV_INTCOUNT ];

	GameEnemyBase()
	{
		//memset( name , 0 , F_MAX_NAME );
	}
};


struct GameEnemy 
{
	//fbyte		name[ F_MAX_NAME * 2 ];
	fint32		intValue[ GEIV_INTCOUNT ];

	GameEnemy()
	{
		//memset( name , 0 , F_MAX_NAME );
	}
};

struct GameEnemyGroup 
{
	//fbyte		name[ F_MAX_NAME * 2 ];

	fint32		intValue[ GEGIV_COUNT ];

	GameEnemyGroup()
	{
		//memset( name , 0 , F_MAX_NAME );
	}
};


struct GameEnemyCount 
{
	fint32		intValue[ GECIV_COUNT ];
};



struct GameEnemyEntity : public GameCreature
{
public:

	friend class BattleManager;
	friend class BattleSession;

	GameEnemyEntity();
	~GameEnemyEntity();

	virtual fvoid			Release();

	virtual fint32			GetExp();
	virtual fvoid			Init( GameEnemy* enemy );

	GameEnemyBase*			GetEnemyBase()
	{
		return mEnemyBase;
	}
	GameEnemy*				GetEnemy()
	{
		return mEnemy;
	}

protected:


	GameEnemyBase*	mEnemyBase;
	GameEnemy*		mEnemy;
};

typedef vector< GameEnemyEntity > GameEnemyEntityVector;
typedef vector< GameEnemyEntity >::iterator GameEnemyEntityVectorIter;



#endif

